/**
 * @param JSONData
 * @param FileName
 * @param title
 * @param filter
 * @constructor
 *
 * JSONData[必填]：传入需要转换的数据（json或者object）
 * FileName：导出Excel文件名（不填为undefined.xls）
 * title[数组]：可以自定义标题（与json标题名称顺序一致，若需要过滤不填则可）
 * filter[数组]：过滤json中的相关行
 */
function JSONToExcel(JSONData, FileName, title, filter) {
    if (!JSONData)
        return;
    //转化json为object
    var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;

    var excel = "<table>";

    //设置表头
    var row = "<tr>";

    if (title) {
        //使用标题项
        for (var i in title) {
            row += "<th align='center'>" + title[i] + '</th>';
        }

    } else {
        //不使用标题项
        for (var i in arrData[0]) {
            row += "<th align='center'>" + i + '</th>';
        }
    }

    excel += row + "</tr>";

    //设置数据
    for (var i = 0; i < arrData.length; i++) {
        var row = "<tr>";

        for (var index in arrData[i]) {
            //判断是否有过滤行
            if (filter) {
                if (filter.indexOf(index) == -1) {
                    var value = arrData[i][index] == null ? "" : arrData[i][index];
                    row += '<td>' + value + '</td>';
                }
            } else {
                var value = arrData[i][index] == null ? "" : arrData[i][index];
                row += "<td align='center'>" + value + "</td>";
            }
        }

        excel += row + "</tr>";
    }

    excel += "</table>";

    var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
    excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';
    excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';
    excelFile += '; charset=UTF-8">';
    excelFile += "<head>";
    excelFile += "<!--[if gte mso 9]>";
    excelFile += "<xml>";
    excelFile += "<x:ExcelWorkbook>";
    excelFile += "<x:ExcelWorksheets>";
    excelFile += "<x:ExcelWorksheet>";
    excelFile += "<x:Name>";
    excelFile += "{worksheet}";
    excelFile += "</x:Name>";
    excelFile += "<x:WorksheetOptions>";
    excelFile += "<x:DisplayGridlines/>";
    excelFile += "</x:WorksheetOptions>";
    excelFile += "</x:ExcelWorksheet>";
    excelFile += "</x:ExcelWorksheets>";
    excelFile += "</x:ExcelWorkbook>";
    excelFile += "</xml>";
    excelFile += "<![endif]-->";
    excelFile += "</head>";
    excelFile += "<body>";
    excelFile += excel;
    excelFile += "</body>";
    excelFile += "</html>";


    var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);

    var link = document.createElement("a");
    link.href = uri;

    link.style = "visibility:hidden";
    link.download = FileName + ".xls";

    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

function tableToPDF(id) {
    let obox = document.getElementById(id)
    let opdfdom = $("#pdfDom")
    let obtn = document.getElementById("btn")
    let lihtml = ''
    for (let i = 0; i < 50; i++) {
        lihtml += "<li>条目" + i + "</li>"
    }
    obox.innerHTML = lihtml

    obtn.onclick = function () {
        downLoadPdf(opdfdom)
    }

    function downLoadPdf(content) {
        content = content ? content : null;
        // 条件判断是否打印
        if (!content) {
            alert("打印失败，请重新操作")
            return false
        }
        // 开始打印
        console.log(content)
        var contentWidth = content.width();
        var contentHeight = content.height();
        var canvas = document.createElement("canvas")
        canvas.width = contentWidth
        canvas.height = contentHeight
        var context = canvas.getContext("2d");
        html2canvas(content, {
            allowTaint: true,
            scale: 2  // 提升画面质量，但是会增加文件大小
        }).then(function (canvas) {
            var pdfWidth = canvas.width;
            var pdfHeight = canvas.height;
            var pageHeight = pdfWidth / 592.28 * 841.89;
            var leftHeight = pdfHeight;
            var position = 0;
            var imgWidth = 595.28;
            var imgHeight = 595.28 / pdfWidth * pdfHeight;
            var pageData = canvas.toDataURL("img/jpeg", 1.0);
            var pdf = new jsPDF('', 'pt', 'a4');
            // 判断打印dom高度是否需要分页，如果需要进行分页处理
            if (leftHeight < pageHeight) {
                pdf.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight)
            } else {
                while (leftHeight > 0) {
                    pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight)
                    leftHeight -= pageHeight
                    position -= 841.89
                    if (leftHeight > 0) {
                        pdf.addPage()
                    }
                }
            }
            pdf.save("案例.pdf")
        })

    }
}

/**
 * 生成下拉列表
 * @param id
 * @param msg
 * @param names
 * @param values
 *
 * id(必须):组件id，字符串；
 * msg(必须):提示内容，字符串；
 * names(必须):列表选项，数组；
 * values:每个选项的value，数组，如果没写默认 1,2,3,4...
 */
function generateSelect(id, msg, names, values) {
    var str = "";
    str = "<option selected=\"\">" + msg + "</option>\n";

    if (values != null) {
        for (let i = 0; i < names.length; i++) {
            str = str + "<option value=\"" + values[i] + "\">" + names[i] + "</option>\n"
        }
    } else {
        for (let i = 0; i < names.length; i++) {
            str = str + "<option value=\"" + (i + 1) + "\">" + names[i] + "</option>\n"
        }
    }


    document.getElementById(id).innerHTML = str;
}

function generateSelect1(id, names, values) {
    var str = "";

    if (values != null) {
        for (let i = 0; i < names.length; i++) {
            str = str + "<option value=\"" + values[i] + "\">" + names[i] + "</option>\n"
        }
    } else {
        for (let i = 0; i < names.length; i++) {
            str = str + "<option value=\"" + (i + 1) + "\">" + names[i] + "</option>\n"
        }
    }


    document.getElementById(id).innerHTML = str;
}